<?php
#!/bin/bash

/**
 * User: hzbskak
 * Date: 2020/1/8 - 16:15
 */

namespace app\admin\model;

/**
 * 后台菜单栏模型
 * Class BsMenuModel
 * @package app\admin\model
 */
class BsMenuModel extends CommonModel
{
    protected $table = 'bs_menu';

    /**
     * 递归查询所有子类
     * @date 2020年1月17日17:13:28
     * ---------------------
     * 查询下一级子类，有的话把结果存入静态的空数组中，再递归调用
     * ---------------------
     * @param $menu_id int 主键ID
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static function getChildren( $menu_id)
    {
        $menu = self::where( 'parentid', 'eq', $menu_id)->select(); // 查询下一级所有数据

        static $children = []; // 声明一个静态数组
        if( !empty( $menu))
        {
            foreach ( $menu as $k => $v)
            {
                $children [] = $v; // 把数据扔到事先声明好的静态数组中
                self::getChildren( $v['menu_id']); // 递归查询
            }
        }

        return $children;
    }

    /**
     * 递归查询所有父类
     * @date 2020年1月17日17:16:13
     * ----------------
     * @f1 查询上一级父类，
     * @f2 把f1存入空数组中
     * @f3 判断f1父级是否为0，不为0则递归
     * ----------------
     * @param $parentid
     * @param array $parent
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static function getParents( $parentid, $parent = [])
    {
        $menu = self::where( 'menu_id', 'eq', $parentid)->find(); // 查询上一级数据

        $parent[] = $menu;
        if( $menu['parentid'] != 0)
        {
            self::getParents( $menu['parentid'], $parent);
        }

        return $parent;
    }

    /**
     * tree 组装树
     * @date 2020年1月17日16:52:15
     * -----------
     * 自上而下的分类
     * 循环传来的数据，
     * 父级等于上级ID时，把递归后的数据扔到父数组内的字段中。把每次的结果扔到空数组里
     * -----------
     * @param $menu array 所有数据 二维数组
     * @param int $parentid 从parentid等级多少开始组装
     * @return array
     */
    public static function getTree( $menu, $parentid = 0)
    {
        $mu = [];
        foreach ( $menu as $k => $v)
        {
            if( $v['parentid'] == $parentid) // 判断父ID是否等于指定父ID
            {
                $v['son'] = self::getTree( $menu, $v['menu_id']); // 有子级，把子级扔到son字段中
                array_push( $mu, $v); // 把带有son的数组扔到事先声明的数组中
            }
        }
        return $mu;
    }

    /**
     * 获取后台用户列排序设置
     * @param $menu_url string 当前操作的绝对路径
     * @return mixed
     */
    public static function getAdminSettingByUrl( $menu_url)
    {
        $order = self::alias( 'b')
            ->join( 'bs_admin_setting a', 'b.menu_id = a.menu_id')
            ->field( 'a.order_list')
            ->where( 'b.menu_url', 'eq', "$menu_url")
            ->where( 'a.userid', 'eq', session( 'id'))
            ->value('a.order_list');
        if( !empty( $order))
        {
            $order = json_decode( $order, true);
        }
        return $order;
    }

    /**
     * 通过url获取主键
     * @date 2020年1月16日11:03:40
     * @param $menu_url
     * @return mixed
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static function getIDByMenuUrl( $menu_url)
    {
        return self::field('menu_id')->where( 'menu_url', $menu_url)
            ->find()['menu_id'];
    }










}